package com.home.demo.controller;

import com.home.demo.common.utils.R;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;
import java.util.HashMap;
import java.util.Map;

/**
 * 文件上传
 */
@RestController
@RequestMapping("/home/file")
public class UploadFileController {

      static final String PATH = "D:/upload/";

      @Value("${server.port}")
      private String port;

    static final String LOCALHOST = "http://localhost:";

    @PostMapping("/upload")
    /**
     * 文件上传功能
     * MultipartFile 用于接收文件的对象 (二进制流)
     *
     */
    public R saveFile(@RequestBody MultipartFile file) throws IOException {
        if (file!=null) {
            //获取当前文件的输入流
            InputStream inputStream = file.getInputStream();
            //获取时间戳
            long l = System.currentTimeMillis();
            File savaFile = new File(PATH+l+file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."))); //保存的地址 没有将自动创建
            OutputStream outputStream = new FileOutputStream(savaFile); //创建一个输出流

            byte[] buff = new byte[10240];
            int len;
             //len != -1 是因为 输入流读到末尾的时候返回的值是-1 , 将数据读入到buff数组里
            while ((len=inputStream.read(buff))!=-1){
                //将buff 的 数据输出出去 , 已0为其实 len 为结尾
                outputStream.write(buff,0,len);
            }
            //关闭流, 避免资源占用
            outputStream.close();
            inputStream.close();
            Map<String,Object> fileInfo = new HashMap<>();
            fileInfo.put("fileType",file.getContentType());
            fileInfo.put("filePath",LOCALHOST+port+"/"+l+file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")));
            fileInfo.put("fileName",file.getOriginalFilename().substring(0,file.getOriginalFilename().lastIndexOf(".")));
           return R.ok().put("fileInfo",fileInfo);
        }

        return R.error("不能上传空文件");
    }

    @PostMapping("/delete/{url}")
    public R deleteFile(@PathVariable("url") String url){
       String uri = PATH + url;
        if (uri!=null) {
            File file = new File(uri);
            file.delete();
            return R.ok();
        }
        return R.error("不能删除空文件");
    }





}
